/*
 * SessionEncoladorBean.java
 *
 * Created on February 15, 2008, 10:30 AM
 * Copyright fsanchez
 */
package operacionesencolador;

import com.computec.encolador.delegate.EncoladorDelegate;
import com.computec.encolador.dto.CategoriaDto;
import com.computec.encolador.dto.ImpresoraDto;
import com.computec.encolador.dto.JobDto;
import com.computec.encolador.exception.EncoladorException;
import com.computec.encolador.source.EncoladorSource;
import com.sun.rave.web.ui.appbase.AbstractSessionBean;
import java.util.ArrayList;
import java.util.Iterator;
import javax.faces.FacesException;
import com.sun.rave.web.ui.model.Option;

/**
 * <p>Session scope data bean for your application.  Create properties
 *  here to represent cached data that should be made available across
 *  multiple HTTP requests for an individual user.</p>
 *
 * <p>An instance of this class will be created for you automatically,
 * the first time your application evaluates a value binding expression
 * or method binding expression that references a managed bean using
 * this class.</p>
 */
public class SessionEncoladorBean extends AbstractSessionBean {
    // <editor-fold defaultstate="collapsed" desc="Creator-managed Component Definition">
    private int __placeholder;
    private boolean renderTree=false;
    private boolean renderAlert=false;
    private EncoladorDelegate encDelegate;
    private Option[] optionCategorias;
    private Option[] optionImpresoras;
    private Option[] optionJobs;
    private boolean[][] matrizJobxImpresora;
    
    /**
     * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */
    private void _init() throws Exception {
	
    }
    // </editor-fold>


    /** 
     * <p>Construct a new session data bean instance.</p>
     */
    public SessionEncoladorBean() {
	encDelegate=new EncoladorDelegate();
    }

    /** 
     * <p>Return a reference to the scoped data bean.</p>
     */
    protected ApplicationEncoladorBean getApplicationEncoladorBean() {
        return (ApplicationEncoladorBean)getBean("ApplicationEncoladorBean");
    }


    /** 
     * <p>This method is called when this bean is initially added to
     * session scope.  Typically, this occurs as a result of evaluating
     * a value binding or method binding expression, which utilizes the
     * managed bean facility to instantiate this bean and store it into
     * session scope.</p>
     * 
     * <p>You may customize this method to initialize and cache data values
     * or resources that are required for the lifetime of a particular
     * user session.</p>
     */
    public void init() {
        // Perform initializations inherited from our superclass
        super.init();
	this.getInfoCombos();
	EncoladorSource source=EncoladorSource.getInstance();
	try{
	    int numeroJobs=Integer.parseInt(source.getEncoladorSetupKey("NumeroJobs"));
	    int numeroImpresora=Integer.parseInt(source.getEncoladorSetupKey("NumeroImpresoras"));	
	    this.matrizJobxImpresora=encDelegate.getMatrizJobXImpresora(numeroJobs, numeroImpresora);
	}catch(EncoladorException ex){
	    ex.printStackTrace();
	}catch(NumberFormatException nex){
	    nex.printStackTrace();
	}
        // Perform application initialization that must complete
        // *before* managed components are initialized
        // TODO - add your own initialiation code here

        // <editor-fold defaultstate="collapsed" desc="Creator-managed Component Initialization">
        // Initialize automatically managed components
        // *Note* - this logic should NOT be modified
        try {
            _init();
        } catch (Exception e) {
            log("SessionBean1 Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e: new FacesException(e);
        }
        // </editor-fold>
        // Perform application initialization that must complete
        // *after* managed components are initialized
        // TODO - add your own initialization code here

    }

    /** 
     * <p>This method is called when the session containing it is about to be
     * passivated.  Typically, this occurs in a distributed servlet container
     * when the session is about to be transferred to a different
     * container instance, after which the <code>activate()</code> method
     * will be called to indicate that the transfer is complete.</p>
     * 
     * <p>You may customize this method to release references to session data
     * or resources that can not be serialized with the session itself.</p>
     */
    public void passivate() {
    }

    /** 
     * <p>This method is called when the session containing it was
     * reactivated.</p>
     * 
     * <p>You may customize this method to reacquire references to session
     * data or resources that could not be serialized with the
     * session itself.</p>
     */
    public void activate() {
    }

    /** 
     * <p>This method is called when this bean is removed from
     * session scope.  Typically, this occurs as a result of
     * the session timing out or being terminated by the application.</p>
     * 
     * <p>You may customize this method to clean up resources allocated
     * during the execution of the <code>init()</code> method, or
     * at any later time during the lifetime of the application.</p>
     */
    public void destroy() {
    }

    public boolean isRenderTree() {
        return renderTree;
    }

    public void setRenderTree(boolean renderTree) {
        this.renderTree = renderTree;
    }
        
    public void getInfoCombos(){
	try{
	    ArrayList catList_=encDelegate.getCategorias();
	    optionCategorias = new Option[catList_.size()];
	    int indice=0;
	    for(Iterator it=catList_.iterator();it.hasNext();){	 		
		CategoriaDto catDto=(CategoriaDto)it.next();
		optionCategorias[indice++] = new Option(catDto.getCodigoCategoria(),catDto.getDescripcion());
	    }
	    
	    ArrayList impList_=encDelegate.getImpresoras();  
	    optionImpresoras = new Option[impList_.size()];
	    indice=0;
	    for(Iterator it=impList_.iterator();it.hasNext();){	 		
		ImpresoraDto impDto=(ImpresoraDto)it.next();
		optionImpresoras[indice++] = new Option(impDto.getCodigoImpresora(),impDto.getNombreCompleto());
	    }
	    
	    ArrayList jobList_=encDelegate.getJobs(); 
	    optionJobs = new Option[jobList_.size()];
	    indice=0;
	    for(Iterator it=jobList_.iterator();it.hasNext();){	 		
		JobDto jobDto=(JobDto)it.next();
		optionJobs[indice++] = new Option(jobDto.getCodigoJob(),jobDto.getDescripcion());
	    }
	    
	}catch(EncoladorException e){
	    e.printStackTrace();
	}
	
	
    }

    public Option[] getOptionCategorias() {
        return optionCategorias;
    }

    public void setOptionCategorias(Option[] optionCategorias) {
        this.optionCategorias = optionCategorias;
    }

    public Option[] getOptionImpresoras() {
        return optionImpresoras;
    }

    public void setOptionImpresoras(Option[] optionImpresoras) {
        this.optionImpresoras = optionImpresoras;
    }

    public Option[] getOptionJobs() {
        return optionJobs;
    }

    public void setOptionJobs(Option[] optionJobs) {
        this.optionJobs = optionJobs;
    }

    public boolean isRenderAlert() {
        return renderAlert;
    }

    public void setRenderAlert(boolean renderAlert) {
        this.renderAlert = renderAlert;
    }

    public boolean[][] getMatrizJobxImpresora() {
        return matrizJobxImpresora;
    }

    public void setMatrizJobxImpresora(boolean[][] matrizJobxImpresora) {
        this.matrizJobxImpresora = matrizJobxImpresora;
    }
}
